package com.dongzili.data.mapdb;//package com.kqns.dataservice.common.mapdb;
//
//import com.kqns.dataservice.custom.user.entity.ApiAccessLog;
//import lombok.RequiredArgsConstructor;
//import org.mapdb.DB;
//import org.mapdb.HTreeMap;
//import org.mapdb.IndexTreeList;
//import org.springframework.scheduling.annotation.Async;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Service;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Map;
//import java.util.concurrent.locks.ReadWriteLock;
//import java.util.concurrent.locks.ReentrantReadWriteLock;
//
//@Service
//@RequiredArgsConstructor
//public class MapDbService {
//    private final DB db; // 直接注入DB对象
//    private final HTreeMap<String, ApiAccessLog> dataMap;
//    private final IndexTreeList<ApiAccessLog> dataList;
//
//    // 使用读写锁确保线程安全
//    private final ReadWriteLock rwLock = new ReentrantReadWriteLock();
//
//    public void put(String key, ApiAccessLog value) {
//        rwLock.writeLock().lock();
//        try {
//            dataMap.put(key, value);
//            db.commit(); // 显式提交
//        } catch (Exception e) {
//            db.rollback(); // 回滚事务
//            throw new RuntimeException("Transaction failed", e);
//        } finally {
//            rwLock.writeLock().unlock();
//        }
//    }
//    public void batchUpdate(Map<String, ApiAccessLog> entries) {
//        rwLock.writeLock().lock();
//        try {
//            dataMap.putAll(entries);
//            db.commit(); // 提交事务
//        } catch (Exception e) {
//            db.rollback(); // 回滚事务
//            throw new RuntimeException("Transaction failed", e);
//        }finally {
//            rwLock.writeLock().lock();
//        }
//    }
//
//    public Object get(String key) {
//        rwLock.readLock().lock();
//        try {
//            return dataMap.get(key);
//        } finally {
//            rwLock.readLock().unlock();
//        }
//    }
//
//    @Async
//    public void add(ApiAccessLog value){
//        rwLock.writeLock().lock();
//        try{
//            dataList.add(value);
//            db.commit(); // 提交事务
//        }catch (Exception e){
//            db.rollback(); // 回滚事务
//            throw new RuntimeException("Transaction failed", e);
//        } finally {
//            rwLock.writeLock().unlock();
//        }
//    }
//
//    public void addBatch(List<ApiAccessLog> values){
//        rwLock.writeLock().lock();
//        try{
//            dataList.addAll(values);
//            db.commit(); // 提交事务
//        }catch (Exception e){
//            db.rollback(); // 回滚事务
//            throw new RuntimeException("Transaction failed", e);
//        } finally {
//            rwLock.writeLock().unlock();
//        }
//    }
//
//    public List<ApiAccessLog> getAll(){
//        rwLock.readLock().lock();
//        try{
//            List<ApiAccessLog> returnList = new ArrayList<>(dataList);
//            dataList.clear();
//            return returnList;
//        } finally {
//            rwLock.readLock().unlock();
//        }
//    }
//
//    public List<ApiAccessLog> getList(int from, int to){
//        rwLock.readLock().lock();
//        try{
//            return dataList.subList(from, to);
//        } finally {
//            rwLock.readLock().unlock();
//        }
//    }
//
//    public List<ApiAccessLog> getList(int size){
//        rwLock.readLock().lock();
//        try{
//            List<ApiAccessLog> list = dataList.subList(0, Math.min(size, dataList.size()));
//            List<ApiAccessLog> returnList = new ArrayList<>(list);
//            dataList.removeAll(list);
//            return returnList;
//        } finally {
//            rwLock.readLock().unlock();
//        }
//    }
//
//
//    @Scheduled(cron = "0/5 * * * * ?")
//    public void doHandlerApiAccessLog(){
//
//        System.out.println("size: "+dataList.size());
//    }
//
//}